package org.guohao.mockdata.utils;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 当statement设置以下属性时，采用的是流数据接收方式，每次只从服务器接收部份数据，直到所有数据处理完毕，不会发生JVM OOM。 ResultSet.TYPE_FORWORD_ONLY
 * 结果集的游标只能向下滚动。 ResultSet.CONCUR_READ_ONLY 不能用结果集更新数据库中的表。 ps.setFetchSize(Integer.MIN_VALUE)
 */
public class JDBCUtil {

  /*
   *进行数据库的链接
   */
  public static Connection getConnection(String driverName, String URL, String user,
      String password) throws ClassNotFoundException, SQLException {
    //加载驱动
    Class.forName(driverName);
    //创建链接
    Connection con = DriverManager.getConnection(URL, user, password);
    //返回连接
    return con;
  }

  /*
   *数据库关闭
   */
  public static void close(Connection con, PreparedStatement pstmt, ResultSet rs) {
    try {
      //判断是否被操作
      if (rs != null) {
        rs.close();
      }
      if (pstmt != null) {
        pstmt.close();
      }
      if (con != null) {
        con.close();
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }

  public static void getTableInfo(Connection connection, String tableName, String columnName) {
    try {
      DatabaseMetaData metaData = connection.getMetaData();
      ResultSet resultSet = metaData.getColumns(null, null, tableName.toUpperCase(),
          columnName.toUpperCase());
      while (resultSet.next()) {
        System.out.print("列名：" + resultSet.getString("COLUMN_NAME"));

        System.out.print(" 数据类型是：" + resultSet.getString("DATA_TYPE"));

        System.out.print(" 类型名称是：" + resultSet.getString("TYPE_NAME"));

        System.out.print(" 列大小是：" + resultSet.getString("COLUMN_SIZE"));

        System.out.println(" 注释是：" + resultSet.getString("REMARKS"));
      }
    } catch (Exception e) {

    }

  }
}
